package com.heima.homeservicemanagementsystem.config.annotation;

import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Description 自定义注解
 * @Author susu
 * @Date 2024/11/25
 */
@RestController
@RequestMapping
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RestControllerMapping {

    /**
     * @AliasFor 注解的使用：
     *
     * 在原来的代码中，value() 和 path() 的 @AliasFor 注解使用的是互相引用的方式：value() 引用了 path()，
     * 而 path() 也引用了 value()。但是，在注解 @RequestMapping 中，value 和 path 实际上都是用来定义请求的路径的，
     * 所以我们应该把它们都明确地与 @RequestMapping 注解的 path 属性进行绑定。
     * 所以这里我将 @AliasFor 注解的属性修正为 annotation = RequestMapping.class, attribute = "path"，
     * 确保 value 和 path 都指向 RequestMapping 注解中的 path 属性。
     * 保留 @RequestMapping 和 @RestController 注解：
     *
     * 你的注解已经正确地继承了 @RestController 和 @RequestMapping，
     * 这两者的结合意味着该注解将会同时具有 @RestController 的功能（处理 RESTful 请求）和 @RequestMapping 的路径映射功能。
     *
     * @param null
     * @return
     * @author xinggang
     * @create 2024/11/28
     **/

    /**
     * This will be used as the "path" for the RequestMapping annotation
     * (Alias for "path" to provide flexibility).
     */
    @AliasFor(annotation = RequestMapping.class, attribute = "path")
    String[] value() default {};

    /**
     * This will also be used as the "path" for the RequestMapping annotation
     * (Alias for "value").
     */
    @AliasFor(annotation = RequestMapping.class, attribute = "path")
    String[] path() default {};

}


/*
package io.ukoko.api.houtai.config.annotation;

import org.springframework.core.annotation.AliasFor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

*/
/**
 * @Description 自定义注解
 * @Author susu
 * @Date 2024/11/25
 *//*

@RestController
@RequestMapping
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RestControllerMapping {
    @org.springframework.core.annotation.AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

}
*/
